﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LoA.Shared.Interfaces;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace LoA.Shared.Physics {
	public interface IPhysicalBody {
		#region Body
		/// <summary>
		/// Model of the Physical Body
		/// </summary>
		Model BodyVisualModel { get; }
		/// <summary>
		/// 
		/// </summary>
		PhysicalModel BodyModel { get; }
		/// <summary>
		/// 
		/// </summary>
		PhysicalState BodyState { get; }
		AnimationStructure Animation { get; }
		#endregion


		/// <summary>
		/// Checks whether the current BoundingSphere intersects with a specified BoundingSphere.
		/// </summary>
		/// <param name="phObject">The BoundingSphere to check for intersection with the current BoundingSphere.</param>
		/// <returns>bool</returns>
		bool Intersects(IPhysicalBody physicalBody);
		/// <summary>
		/// Checks whether the current BoundingSphere contains the specified BoundingSphere.
		/// </summary>
		/// <param name="phObject">The BoundingSphere to check against the current BoundingSphere.</param>
		/// <returns></returns>
		ContainmentType Contains(IPhysicalBody physicalBody);

		void CorrectPosition(object sender, Vector3 position);
		void CorrectDirection(object sender, Vector3 direction);
		void CorrectForce(object sender, float force);
		void CorrectState(object sender);

		/// <summary>
		/// 
		/// </summary>
		void Update(GameTime gameTime);
		void Draw(ICamera camera);
	}
}
